package crawler_twitter;


import java.util.LinkedList;
import java.util.List;

import object.Utente;

import mysql.Connector;
import mysql.DBCache;

import access_twitter.TwitterFactory;
import access_twitter.TwitterWrapper;
import access_twitter.searchItem;


import winterwell.jtwitter.Twitter.Status;
import winterwell.jtwitter.Twitter.User;

/*classe 
*/
public class CrawlerAmici {
	TwitterWrapper twitter;
	DBCache dbCache;
	
	public  CrawlerAmici() {
		twitter = TwitterFactory.getInstance().getTwitterWrapper();
		dbCache = DBCache.getInstance();
	}
	

	private void run(Utente utn) {
		//avvio la connessione al db, il programma usa una sola connessione al db mysql
		Connector.getInstance().connetti();		
		if (utn != null){
			crawluserFriend(utn);
		}else
			System.out.println("Impossibile scaricare amici di " + utn );
		
		//chiudo la connessione al db
		Connector.getInstance().disconnetti();
	}
	
	private void crawluserFriend(Utente utn) {
		int limiteAmici=0;
		List<User> amici = new LinkedList<User>();
		System.out.println("inizio scanzione amici per "+utn.getNome());
		System.out.println("inizio scanzione amici per "+utn.getId());
		amici=twitter.getFriends(utn.getNome());
		System.out.println("l'utente "+utn.getNome() +"ha "+amici.size()+"amici");
		dbCache.inserisciAmici(utn.getNome(), amici);
		System.out.println("inizio inserimento tweetAmici");
		for (User us:amici){
			if(limiteAmici<201){
			System.out.println("scanzione timeline utente "+us.getScreenName());
			twitter.getUserTimeline(us.getScreenName());
			dbCache.inserisciTweetAmici(twitter.getUserTimeline(us.getScreenName()),utn.getId());
			limiteAmici++;
			}
		}
		System.out.println("inserimento tweetAmici "+utn.getNome()+" completato");
	
	}
	
	public static void main(String[] args) {
		int cont=0;
		List<Utente> utentidascanzionare = new LinkedList<Utente>();
		List<Utente> utentitemp = new LinkedList<Utente>();
		List<String> idutente = new LinkedList<String>();
		DBCache db;
		db = DBCache.getInstance();
		utentitemp = db.getUtenti();
		idutente = db.getIdUtentiInAmici();
		
        for(Utente ut:utentitemp){
        	if (!idutente.contains(Integer.toString(ut.getId()))){
        		utentidascanzionare.add(ut);
        	}
        }
        
		for(Utente utn : utentidascanzionare){
			System.out.println(utn.getNome());
			System.out.println(utn.getId());
			CrawlerAmici crwaici = new CrawlerAmici();
			crwaici.run(utn);
			}
		}
	


}
